modelbutton: Reset active menu item on pointer leave
authorTimm Bäder <mail@baedert.org>
Sun, 29 Nov 2020 08:49:08 +0000 (09:49 +0100)
committerMatthias Clasen <mclasen@redhat.com>
Mon, 30 Nov 2020 14:23:03 +0000 (09:23 -0500)
We don't want to leave an active menu item behind if the pointer doesn't
enter another menu item.
This matches the old GtkMenu behavior

gtk/gtkmodelbutton.c

index 3d2e2519c48c14dbff052f139cb263357a84b867..32232909b3b5d68845279a5afaa95d4cfd227bbc 100644 (file)
@@ -1387,18 +1387,16 @@ pointer_cb (GObject    *object,
             GParamSpec *pspec,
             gpointer    data)
 {
+  GtkWidget *target = GTK_WIDGET (data);
+  GtkWidget *popover;
   gboolean contains;
 
   contains = gtk_event_controller_motion_contains_pointer (GTK_EVENT_CONTROLLER_MOTION (object));
 
+  popover = gtk_widget_get_ancestor (target, GTK_TYPE_POPOVER_MENU);
+
   if (contains)
     {
-      GtkWidget *target;
-      GtkWidget *popover;
-
-      target = GTK_WIDGET (data);
-      popover = gtk_widget_get_ancestor (target, GTK_TYPE_POPOVER_MENU);
-
       if (popover)
         {
           if (gtk_popover_menu_get_open_submenu (GTK_POPOVER_MENU (popover)) != NULL)
@@ -1412,6 +1410,7 @@ pointer_cb (GObject    *object,
       GtkModelButton *button = data;
 
       stop_open (button);
+      gtk_popover_menu_set_active_item (GTK_POPOVER_MENU (popover), NULL);
     }
 }